package basicQuiz

import org.springframework.cloud.contract.spec.Contract

[Contract.make {
    request {
        method("GET")
        url("/api/v3/basicQuizzes") {
            queryParameters {
                parameter("page", 1)
                parameter("pageSize", 2)
                parameter("quizType", "SINGLE_CHOICE")
                parameter("type", "makerId")
                parameter("content", "1")
            }
        }
        headers {
            header("id", 1)
            contentType(applicationJson())
        }
    }
    response {
        status(200)
        body("""
            {
                "content":[
                    {
                        "id": 4,
                        "description": "description 4",
                        "type": "SINGLE_CHOICE",
                        "answer": ["A"],
                        "quizGroupId": 1,
                        "createTime": "2018-09-10 07:39:46.0",
                        "updateTime": "2018-09-10 07:39:46.0",
                        "makerId": 1,
                        "choices": [],
                        "tags": [],
                        "available": true,
                        "maker": "",
                        "quizGroupName": null
                    }
                ],
                "totalPages": 1,
                "totalElements": 1,
                "size": 10,
                "number": 0
            }
        """)
        bodyMatchers {
            jsonPath('$.content[*].id', byType())
            jsonPath('$.content[*].description', byType())
            jsonPath('$.content[*].type', byType())
            jsonPath('$.content[*].answer', byType())
            jsonPath('$.content[*].quizGroupId', byType())
            jsonPath('$.content[*].createTime', byType())
            jsonPath('$.content[*].updateTime', byType())
            jsonPath('$.content[*].makerId', byType())
            jsonPath('$.content[*].choices', byType())
            jsonPath('$.content[*].tags', byType())
            jsonPath('$.content[*].available', byType())
            jsonPath('$.content[*].maker', byType())
            jsonPath('$.content[*].quizGroupName', byType())
            jsonPath('$.totalPages', byRegex(number()))
            jsonPath('$.totalElements', byRegex(number()))
            jsonPath('$.size', byRegex(number()))
            jsonPath('$.number', byRegex(number()))
        }
        headers {
            contentType(applicationJson())
        }
    }
},
 Contract.make {
     request {
         method("GET")
         url("/api/v3/basicQuizzes/selecting/1")
     }
     response {
         status(200)
         body("""
                       [{
                "id":1,
                "description":"description 1",
                "type":"SINGLE_CHOICE",
                "answer":"A",
                "quizGroupId":1,
                "createTime":"2018-08-08 00:00:00",
                "updateTime":"2018-08-08 00:00:00",
                "makerId":1,
                "choices":[],
                "tags":[],
                "available":"true",
                "maker":"",
                "quizGroupName":"null"
            }]
            """)
         bodyMatchers {
             jsonPath('$[*]', byType())
             jsonPath('$[*].id', byRegex(number()))
             jsonPath('$[*].description', byType())
             jsonPath('$[*].type', byType())
             jsonPath('$[*].answer', byType())
             jsonPath('$[*].quizGroupId', byRegex(number()))
             jsonPath('$[*].createTime', byType())
             jsonPath('$[*].updateTime', byType())
             jsonPath('$[*].makerId', byType())
             jsonPath('$[*].choices', byType())
             jsonPath('$[*].tags', byType())
             jsonPath('$[*].available', byRegex(anyBoolean()))
             jsonPath('$[*].maker', byType())
             jsonPath('$[*].quizGroupName', byType())
         }
         headers {
             contentType(applicationJson())
         }
     }
 }
]
